package com.itheima.xinxi.system.controller;

import com.itheima.xinxi.system.domain.Student;
import com.itheima.xinxi.system.service.StudentService;

import java.util.Scanner;

/**
 * 学生用户交互类
 */
public abstract class BaseStudentController {

    //创建对象调用方法
    private StudentService studentService = new StudentService();//对象数据
    private Scanner sc = new Scanner(System.in);


    //开启学生操作
    public final void start() {//自带一个this 代表本类的对象
        xuanze:
        while (true) {
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看学生");
            System.out.println("5 退出");
            System.out.println("请输入您的选择:");
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    // System.out.println("添加学生");//模拟我已经把这个做完了
                    this.addStudent();
                    break;
                case 2:
                    //System.out.println("删除学生");//模拟我已经把这个做完了
                    this.deleteStudentById();
                    break;
                case 3:
                    //System.out.println("修改学生");//模拟我已经把这个做完了
                    this.updateStudent();
                    break;
                case 4:
                    // System.out.println("查看学生");//模拟我已经把这个做完了
                    this.findAllStudents();
                    break;

                case 5:
                    System.out.println("感谢使用");//模拟我已经把这个做完了
                    //break xuanze;

                    return;

                default:
                    System.out.println("输入有误");//模拟我已经把这个做完了
                    break;
            }
        }
    }
    //修改学生
    public final  void updateStudent() {
        //TODO   处理 没有数据时的问题
        String id = getId();
        Student student = getStudent(id);

        //调用service 实现修改
        studentService.updateStudent(id,student);
        //提示
        System.out.println("修改成功");


    }

    /**
     * 删除学生 根据用户录入的学生id
     */
    public final  void deleteStudentById() {
        //TODO   处理 没有数据时的问题
        String id = getId();
        //调用service 删除学生信息
        studentService.deleteStudentById(id);
        //提示删除成功
        System.out.println("删除成功");

    }
    //获取id
    public final  String getId() {
        String id;
        while (true) {
            //录入id
            System.out.println("请输入学生id");
            id = sc.next();
            //查看id 是否存在  不存在重新录
            boolean flag = studentService.isExits(id);
            if (flag) {
                break;
            } else {
                System.out.println("再录");
            }

        }
        return id;
    }
    //查询所有
    public  final void findAllStudents() {
        //调用service查询方法 获取 结果
        Student[] stus = studentService.findAllStudents();
        //判断是否为null  输出没有数据
        if (stus == null) {
            System.out.println("没有数据");
        } else {
            //有东西 遍历数组显示数据
            System.out.println("学号\t姓名\t年龄\t生日");
            for (int i = 0; i < stus.length; i++) {
                //stus[i]
                Student student = stus[i];
                if (student != null) {
                    System.out.println(student.getId() + "\t" + student.getName() + "\t" + student.getAge() + "岁\t" + student.getBirthday());
                }
            }
        }
    }

    //定义方法 添加学生
    //参数  没有
    //返回值类型  void
    public final  void addStudent() {


        //键盘录入数据
        System.out.println("请输入学号");
        String id;
        while (true) {
            //处理学号重复问题
            id = sc.next();
            //调用service 判断学号是否存在的方法
            boolean flag = studentService.isExits(id);
            if (flag) {
                System.out.println("重录");
            } else {
                break;
            }
        }

        Student student = getStudent(id);
        //new Student(id,name,age,birthday);
        //调用service

        boolean b = studentService.addStudent(student);
        //获取结果分析结果
        if (b) {
            //给用户一个结果
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }


    }
    //获取学生数据
    public abstract Student getStudent(String id) ;

}
